Angle Calculation
I was pulling the wrong coefficients from the LDA, which is why the angles were in the wrong range last time.
I am now pulling the right coefficients, but not matching the published angles for 9 subjects. I think this is a problem of not having all of the data for subjects that were run multiple times.
All the figures and tables in google slides are updated.
Deploying to tablets
- got a tablet to test on and things downloaded
- still need to test
Predicting Weighting Class
Defining the input features
- corner accuracy: how well you heard the corner data (e.g. Stimuli1=5, Stimuli2=1, you respond ‘BAH’)
- semi-corner accuracy: how well you perform on the “inner ring” stimuli (e.g. Stimuli_1=4, Stimuli_2=2, you respond ‘BAH’ or Stimuli_1=4 and Stimuli_2=1, you respond ‘BAH’)
- edge accuracy: whether or not you were correct in an unambiguous dimension (e.g. Stimuli_1=5, Stimuli_2=3, you respond ‘BAH’)
- demographics: STMDetectionThresholdL, STMDetectionThresholdR, STMSensitivityL, STMSensitivityR, C_Tpracticerounds, AgeCT, R3FPTA, L3FPTA
I chose the demographics based on what looked like a hearing test and not an aggregate of some other feature, but picking better demographics is something we should talk about.
No demographic information available for 28, 53, 246, 374, 514, 533, or 555.
Clustering
We did some automatic clustering to define Cue categories based on the weighting angle. The method that showed most consistent values within clusters was a 3-way classification of Temporal, Spectral, Neither.
Ways I played with the algorithm:
- number clusters
- distance measures euclidean
- distance threshold 100
- variance minimizations ward (minimize in group variance)
Input features:
- corner, semi-corner and edge accuracy counts (6)
- all prediction type-response triplets (100)
- final angle (1)
- corner, semi-corner, edge, and angle (7)
Measures in red were used in the final clussterer.
Random Forest Classifier
When trained on corner+semi-corner+edge+angle features, perfectly predicts held-out class labels (train/test acc 100%) for full Without angle as input, train acc 0.6 test 0.57
Behavior of the different LSTMs
We have been looking at ways of predicting a coarse-grain category for angles using statistical and neural methods.
Plot the various models.
Base, Step 10
The subjects who are taking longer to converge:
Base, Corner, & Predicted LDA, Step 10
The subjects who are taking longer to converge:
Base, Corner, Predicted LDA, & Demographics, Step 10
The subjects who are taking longer to converge:
Base, Co srner, LDA & Demographics, Step 1
LS0tCnRpdGxlOiAiVXBkYXRlcyB0byBDdWUgUHJvZmlsZSBBbmFseXNpcyIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKYGBge3IsZWNobz1GQUxTRSxyZXN1bHRzPSdoaWRlJyx3YXJuaW5nPUZBTFNFfQpsaWJyYXJ5KHBsb3RseSkKbGlicmFyeShnZ3Bsb3QyKQpsaWJyYXJ5KFJDb2xvckJyZXdlcikKbGlicmFyeShwYXRjaHdvcmspCmBgYAoKIyMgQW5nbGUgQ2FsY3VsYXRpb24KCkkgd2FzIHB1bGxpbmcgdGhlIHdyb25nIGNvZWZmaWNpZW50cyBmcm9tIHRoZSBMREEsIHdoaWNoIGlzIHdoeSB0aGUgYW5nbGVzIHdlcmUgaW4gdGhlIHdyb25nIHJhbmdlIGxhc3QgdGltZS4gIAoKSSBhbSBub3cgcHVsbGluZyB0aGUgcmlnaHQgY29lZmZpY2llbnRzLCBidXQgbm90IG1hdGNoaW5nIHRoZSBwdWJsaXNoZWQgYW5nbGVzIGZvciA5IHN1YmplY3RzLiAgSSB0aGluayB0aGlzIGlzIGEgcHJvYmxlbSBvZiBub3QgaGF2aW5nIGFsbCBvZiB0aGUgZGF0YSBmb3Igc3ViamVjdHMgdGhhdCB3ZXJlIHJ1biBtdWx0aXBsZSB0aW1lcy4KCkFsbCB0aGUgZmlndXJlcyBhbmQgdGFibGVzIGluIGdvb2dsZSBzbGlkZXMgYXJlIHVwZGF0ZWQuCgojIyBEZXBsb3lpbmcgdG8gdGFibGV0cwoKKiBnb3QgYSB0YWJsZXQgdG8gdGVzdCBvbiBhbmQgdGhpbmdzIGRvd25sb2FkZWQKKiBzdGlsbCBuZWVkIHRvIHRlc3QKCiMgUHJlZGljdGluZyBXZWlnaHRpbmcgQ2xhc3MKCkRlZmluaW5nIHRoZSBpbnB1dCBmZWF0dXJlcwoKKiBfY29ybmVyIGFjY3VyYWN5XzogIGhvdyB3ZWxsIHlvdSBoZWFyZCB0aGUgY29ybmVyIGRhdGEgKGUuZy4gU3RpbXVsaTE9NSwgU3RpbXVsaTI9MSwgeW91IHJlc3BvbmQgJ0JBSCcpCiogX3NlbWktY29ybmVyIGFjY3VyYWN5XzogIGhvdyB3ZWxsIHlvdSBwZXJmb3JtIG9uIHRoZSAiaW5uZXIgcmluZyIgc3RpbXVsaSAoZS5nLiBTdGltdWxpXzE9NCwgU3RpbXVsaV8yPTIsIHlvdSByZXNwb25kICdCQUgnIG9yIFN0aW11bGlfMT00IGFuZCBTdGltdWxpXzI9MSwgeW91IHJlc3BvbmQgJ0JBSCcpCiogX2VkZ2UgYWNjdXJhY3lfOiAgd2hldGhlciBvciBub3QgeW91IHdlcmUgY29ycmVjdCBpbiBhbiB1bmFtYmlndW91cyBkaW1lbnNpb24gKGUuZy4gU3RpbXVsaV8xPTUsIFN0aW11bGlfMj0zLCB5b3UgcmVzcG9uZCAnQkFIJykKKiBfZGVtb2dyYXBoaWNzXzogIFNUTURldGVjdGlvblRocmVzaG9sZEwsIFNUTURldGVjdGlvblRocmVzaG9sZFIsIFNUTVNlbnNpdGl2aXR5TCwgU1RNU2Vuc2l0aXZpdHlSLCBDX1RwcmFjdGljZXJvdW5kcywgQWdlQ1QsIFIzRlBUQSwgTDNGUFRBCgpJIGNob3NlIHRoZSBkZW1vZ3JhcGhpY3MgYmFzZWQgb24gd2hhdCBsb29rZWQgbGlrZSBhIGhlYXJpbmcgdGVzdCBhbmQgbm90IGFuIGFnZ3JlZ2F0ZSBvZiBzb21lIG90aGVyIGZlYXR1cmUsIGJ1dCBwaWNraW5nIGJldHRlciBkZW1vZ3JhcGhpY3MgaXMgc29tZXRoaW5nIHdlIHNob3VsZCB0YWxrIGFib3V0LgoKTm8gZGVtb2dyYXBoaWMgaW5mb3JtYXRpb24gYXZhaWxhYmxlIGZvciAyOCwgNTMsIDI0NiwgMzc0LCA1MTQsIDUzMywgb3IgNTU1LgoKIyMgQ2x1c3RlcmluZwoKV2UgZGlkIHNvbWUgYXV0b21hdGljIGNsdXN0ZXJpbmcgdG8gZGVmaW5lIEN1ZSBjYXRlZ29yaWVzIGJhc2VkIG9uIHRoZSB3ZWlnaHRpbmcgYW5nbGUuICBUaGUgbWV0aG9kIHRoYXQgc2hvd2VkIG1vc3QgY29uc2lzdGVudCB2YWx1ZXMgd2l0aGluIGNsdXN0ZXJzIHdhcyBhIDMtd2F5IGNsYXNzaWZpY2F0aW9uIG9mIFRlbXBvcmFsLCBTcGVjdHJhbCwgTmVpdGhlci4KCldheXMgSSBwbGF5ZWQgd2l0aCB0aGUgYWxnb3JpdGhtOgoKKiBudW1iZXIgY2x1c3RlcnMKKiBkaXN0YW5jZSBtZWFzdXJlcyA8c3BhbiBzdHlsZT0iY29sb3I6cmVkIj5ldWNsaWRlYW48L3NwYW4+CiogZGlzdGFuY2UgdGhyZXNob2xkIDxzcGFuIHN0eWxlPSJjb2xvcjpyZWQiPjEwMDwvc3Bhbj4KKiB2YXJpYW5jZSBtaW5pbWl6YXRpb25zIDxzcGFuIHN0eWxlPSJjb2xvcjpyZWQiPndhcmQgKG1pbmltaXplIGluIGdyb3VwIHZhcmlhbmNlKTwvc3Bhbj4KCklucHV0IGZlYXR1cmVzOgoKKiBjb3JuZXIsIHNlbWktY29ybmVyIGFuZCBlZGdlIGFjY3VyYWN5IGNvdW50cyAoNikKKiBhbGwgcHJlZGljdGlvbiB0eXBlLXJlc3BvbnNlIHRyaXBsZXRzICgxMDApCiogPHNwYW4gc3R5bGU9ImNvbG9yOnJlZCI+ZmluYWwgYW5nbGUgKDEpPC9zcGFuPgoqIGNvcm5lciwgc2VtaS1jb3JuZXIsIGVkZ2UsIGFuZCBhbmdsZSAoNykKCk1lYXN1cmVzIGluIHJlZCB3ZXJlIHVzZWQgaW4gdGhlIGZpbmFsIGNsdXNzdGVyZXIuCgojIyBSYW5kb20gRm9yZXN0IENsYXNzaWZpZXIKCldoZW4gdHJhaW5lZCBvbiBjb3JuZXIrc2VtaS1jb3JuZXIrZWRnZSthbmdsZSBmZWF0dXJlcywgcGVyZmVjdGx5IHByZWRpY3RzIGhlbGQtb3V0IGNsYXNzIGxhYmVscyAodHJhaW4vdGVzdCBhY2MgMTAwJSkgZm9yIGZ1bGwKV2l0aG91dCBhbmdsZSBhcyBpbnB1dCwgdHJhaW4gYWNjIDAuNiAgdGVzdCAwLjU3CgojIyBCZWhhdmlvciBvZiB0aGUgZGlmZmVyZW50IExTVE1zCgpXZSBoYXZlIGJlZW4gbG9va2luZyBhdCB3YXlzIG9mIHByZWRpY3RpbmcgYSBjb2Fyc2UtZ3JhaW4gY2F0ZWdvcnkgZm9yIGFuZ2xlcyB1c2luZyBzdGF0aXN0aWNhbCBhbmQgbmV1cmFsIG1ldGhvZHMuCgpgYGB7cixlY2hvPUZBTFNFfQojIExTVE0gcmVzdWx0cwpkYXRhLmZyYW1lKCJpbnB1dCBmZWF0cyIgPSBjKCJiYXNlIiwgImJhc2UiLCAiYmFzZSArIGNvcm5lciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJiYXNlICsgY29ybmVyICsgTERBIiwgImJhc2UgKyBjb3JuZXIgKyBMREEgKyBkZW1vZ3JhcGhpY3MiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiYmFzZSArIGNvcm5lciIsICJiYXNlICsgY29ybmVyIiksCiAgICAgICAgICAgInN0ZXAgc2l6ZSIgPSBjKDI1LDEwLDEwLDEwLDEwLDUsMSksCiAgICAgICAgICAgInRyYWluIGFjY3VyYWN5IiA9IGMoIjg4JSIsICI4MzAvODM1ICg5OSUpIiwgIjgzNS84MzUgKDEwMCUpIiwgIjgzNS84MzUgKDEwMCUpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjgxOS84MzUgKDk4JSkiLCAiMTY0Ny8xNjQ3ICgxMDAlKSIsICI4MTQzLzgxNDMgKDEwMCUpIiksCiAgICAgICAgICAgInRlc3QgYWNjdXJhY3kiID0gYygiOTAlIiwgIjEwMCUiLCAiMTAwJSIsICIxMDAlIiwgIjk5JSIsICIxMDAlIiwgIjEwMCUiKSkKCiMgbG9hZCB0aGUgYW5nbGUgZGF0YSBzbyBpIGNhbiByZWZlciBiYWNrIHRvIGl0CmFuZ2xlX2RhdGEgPSByZWFkLmNzdignL1VzZXJzL3NhcmEvRG9jdW1lbnRzL3Jlc2VhcmNoL25paC9jb21wYXJpbmctZXJyb3ItcmF0ZXMvbmloL2FuZ2xlLnRzdicsc2VwPSdcdCcpCmhhc19kZW1vID0gZnVuY3Rpb24oc3Viail7CiAgaWYgKHN1YmogJWluJSBuby5kZW1vKXsKICAgIHJldHVybigiVFJVRSIpCiAgfSBlbHNlIHsKICAgIHJldHVybigiRkFMU0UiKQogIH0KfQpuby5kZW1vIDwtIGMoMjgsIDUzLCAyNDYsIDM3NCwgNTE0LCA1MzMsIDU1NSkKYW5nbGVfZGF0YSRNaXNzaW5nLkRlbW8gPC0gdW5saXN0KGxhcHBseShhbmdsZV9kYXRhJFN1YmosaGFzX2RlbW8pKQpgYGAKCmBgYHtyLGVjaG89RkFMU0V9Cm1ha2VfaW5kZXggPC0gZnVuY3Rpb24oaW5kKXsKICAgIHJldHVybihhcy5udW1lcmljKHN1YnN0cihpbmQsMixuY2hhcihhcy5jaGFyYWN0ZXIoaW5kKSkpKSkKICB9CnB1bGxfdGFibGUgPC0gZnVuY3Rpb24ocGF0aCl7CiAgZGF0YSA8LSByZWFkLmNzdihwYXRoKQogIGRhdGEgPC0gY2JpbmQoZGF0YVsxXSxzdGFjayhkYXRhWzI6bmNvbChkYXRhKV0pKQogIGRhdGEkaW5kID0gbGFwcGx5KGRhdGEkaW5kLG1ha2VfaW5kZXgpCiAgcmV0dXJuKGFzLmRhdGEuZnJhbWUobGFwcGx5KGRhdGEsdW5saXN0KSkpCn0KYGBgCgpQbG90IHRoZSB2YXJpb3VzIG1vZGVscy4KYGBge3IsIGVjaG89RkFMU0V9CmdldFBhbGV0dGUgPC0gY29sb3JSYW1wUGFsZXR0ZShicmV3ZXIucGFsKDgsICJTZXQyIikpCm1ha2VfcGxvdCA9IGZ1bmN0aW9uKGRhdGEseWxhYj0nUHJvYmFiaWxpdHkgb2YgY29ycmVjdCBjbGFzcycsdGl0bGU9J0Jhc2UgKyBDb3JuZXJzLCBTdGVwIDEwJyl7CiAgcCA8LSBnZ3Bsb3QoZGF0YT1kYXRhLCBhZXMoeD1pbmQsIHk9dmFsdWVzLGNvbG9yPWFzLmZhY3RvcihzdWJqKSkpICsKICAgIGdlb21fbGluZSgpICsKICAgIGdlb21fcG9pbnQoKSsKICAgIHNjYWxlX2NvbG9yX21hbnVhbChuYW1lPSdTdWJqZWN0Jyx2YWx1ZXMgPSBnZXRQYWxldHRlKDI5KSkrCiAgICBzY2FsZV94X2Rpc2NyZXRlKG5hbWU9J051bWJlciBvZiB0cmlhbHMgaW4gdGVzdCBzZXF1ZW5jZScpKwogICAgc2NhbGVfeV9jb250aW51b3VzKG5hbWU9eWxhYikrCiAgICBnZ3RpdGxlKHRpdGxlKQogIHJldHVybihnZ3Bsb3RseShwKSkKfQpgYGAKCiMjIEJhc2UsIFN0ZXAgMjUKYGBge3IsZWNobz1GQUxTRX0KZ29vZF9wcm9icyA8LSAnL1VzZXJzL3NhcmEvRG9jdW1lbnRzL3Jlc2VhcmNoL25paC9jb21wYXJpbmctZXJyb3ItcmF0ZXMvbHN0bV9yZXN1bHRzL2Jhc2VfMjVfcm5uX3Byb2JzLmNzdicKYmFkX3Byb2JzIDwtICcvVXNlcnMvc2FyYS9Eb2N1bWVudHMvcmVzZWFyY2gvbmloL2NvbXBhcmluZy1lcnJvci1yYXRlcy9sc3RtX3Jlc3VsdHMvYmFzZV8yNV9ybm5fYmFkX3Byb2JzLmNzdicKZ29vZF9kYXRhIDwtIHB1bGxfdGFibGUoZ29vZF9wcm9icykKYmFkX2RhdGEgPC0gcHVsbF90YWJsZShiYWRfcHJvYnMpCm1ha2VfcGxvdChnb29kX2RhdGEsdGl0bGU9J0Jhc2UsIFN0ZXAgMjUnKSAKbWFrZV9wbG90KGJhZF9kYXRhLHlsYWI9J0hpZ2hlc3QgUHJvYmFiaWxpdHkgb2YgaW5jb3JyZWN0IGNsYXNzJyx0aXRsZT0nQmFzZSwgU3RlcCAyNScpCmBgYAoKIyMgQmFzZSwgU3RlcCAxMApgYGB7cixlY2hvPUZBTFNFfQpnb29kX3Byb2JzIDwtICcvVXNlcnMvc2FyYS9Eb2N1bWVudHMvcmVzZWFyY2gvbmloL2NvbXBhcmluZy1lcnJvci1yYXRlcy9sc3RtX3Jlc3VsdHMvYmFzZV8xMF9ybm5fcHJvYnMuY3N2JwpiYWRfcHJvYnMgPC0gJy9Vc2Vycy9zYXJhL0RvY3VtZW50cy9yZXNlYXJjaC9uaWgvY29tcGFyaW5nLWVycm9yLXJhdGVzL2xzdG1fcmVzdWx0cy9iYXNlXzEwX3Jubl9iYWRfcHJvYnMuY3N2Jwpnb29kX2RhdGEgPC0gcHVsbF90YWJsZShnb29kX3Byb2JzKQpiYWRfZGF0YSA8LSBwdWxsX3RhYmxlKGJhZF9wcm9icykKbWFrZV9wbG90KGdvb2RfZGF0YSx0aXRsZT0nQmFzZSwgU3RlcCAxMCcpIAptYWtlX3Bsb3QoYmFkX2RhdGEseWxhYj0nSGlnaGVzdCBQcm9iYWJpbGl0eSBvZiBpbmNvcnJlY3QgY2xhc3MnLHRpdGxlPSdCYXNlLCBTdGVwIDEwJykKYGBgClRoZSBzdWJqZWN0cyB3aG8gYXJlIHRha2luZyBsb25nZXIgdG8gY29udmVyZ2U6CmBgYHtyLGVjaG89RkFMU0V9CmJhZF9zdWJqZWN0cyA9IGMoNTM2LDUyNSw1MzcsNTU2LDUyOSkKZmlsdGVyKGFuZ2xlX2RhdGEsU3ViaiAlaW4lIGJhZF9zdWJqZWN0cykKYGBgCgojIyBCYXNlICYgQ29ybmVyLCBTdGVwIDEwCgpgYGB7cixlY2hvPUZBTFNFfQpnb29kX3Byb2JzIDwtICcvVXNlcnMvc2FyYS9Eb2N1bWVudHMvcmVzZWFyY2gvbmloL2NvbXBhcmluZy1lcnJvci1yYXRlcy9sc3RtX3Jlc3VsdHMvY29ybmVyc18xMF9ybm5fcHJvYnMuY3N2JwpiYWRfcHJvYnMgPC0gJy9Vc2Vycy9zYXJhL0RvY3VtZW50cy9yZXNlYXJjaC9uaWgvY29tcGFyaW5nLWVycm9yLXJhdGVzL2xzdG1fcmVzdWx0cy9jb3JuZXJzXzEwX3Jubl9iYWRfcHJvYnMuY3N2Jwpnb29kX2RhdGEgPC0gcHVsbF90YWJsZShnb29kX3Byb2JzKQpiYWRfZGF0YSA8LSBwdWxsX3RhYmxlKGJhZF9wcm9icykKbWFrZV9wbG90KGdvb2RfZGF0YSx0aXRsZT0nQmFzZSAmIENvcm5lciwgU3RlcCAxMCcpIAptYWtlX3Bsb3QoYmFkX2RhdGEseWxhYj0nSGlnaGVzdCBQcm9iYWJpbGl0eSBvZiBpbmNvcnJlY3QgY2xhc3MnLHRpdGxlPSdCYXNlICYgQ29ybmVyLCBTdGVwIDEwJykKYGBgCgojIyBCYXNlLCBDb3JuZXIsICYgUHJlZGljdGVkIExEQSwgU3RlcCAxMAoKYGBge3IsZWNobz1GQUxTRX0KZ29vZF9wcm9icyA8LSAnL1VzZXJzL3NhcmEvRG9jdW1lbnRzL3Jlc2VhcmNoL25paC9jb21wYXJpbmctZXJyb3ItcmF0ZXMvbHN0bV9yZXN1bHRzL2Nvcm5lcnNfYW5kX2xkYV8xMF9ybm5fcHJvYnMuY3N2JwpiYWRfcHJvYnMgPC0gJy9Vc2Vycy9zYXJhL0RvY3VtZW50cy9yZXNlYXJjaC9uaWgvY29tcGFyaW5nLWVycm9yLXJhdGVzL2xzdG1fcmVzdWx0cy9jb3JuZXJzX2FuZF9sZGFfMTBfcm5uX2JhZF9wcm9icy5jc3YnCmdvb2RfZGF0YSA8LSBwdWxsX3RhYmxlKGdvb2RfcHJvYnMpCmJhZF9kYXRhIDwtIHB1bGxfdGFibGUoYmFkX3Byb2JzKQptYWtlX3Bsb3QoZ29vZF9kYXRhLHRpdGxlPSdCYXNlLCBDb3JuZXIgJiBMREEsIFN0ZXAgMTAnKSAKbWFrZV9wbG90KGJhZF9kYXRhLHlsYWI9J0hpZ2hlc3QgUHJvYmFiaWxpdHkgb2YgaW5jb3JyZWN0IGNsYXNzJyx0aXRsZT0nQmFzZSwgQ29ybmVyICYgTERBLCBTdGVwIDEwJykKYGBgClRoZSBzdWJqZWN0cyB3aG8gYXJlIHRha2luZyBsb25nZXIgdG8gY29udmVyZ2U6CmBgYHtyLGVjaG89RkFMU0V9CmJhZF9zdWJqZWN0cyA9IGMoNTcxLDU0Miw1Miw0Nyw1MTYsNTEwKQpmaWx0ZXIoYW5nbGVfZGF0YSxTdWJqICVpbiUgYmFkX3N1YmplY3RzKQpgYGAKIyMgQmFzZSwgQ29ybmVyLCBQcmVkaWN0ZWQgTERBLCAmIERlbW9ncmFwaGljcywgU3RlcCAxMAoKYGBge3IsZWNobz1GQUxTRX0KZ29vZF9wcm9icyA8LSAnL1VzZXJzL3NhcmEvRG9jdW1lbnRzL3Jlc2VhcmNoL25paC9jb21wYXJpbmctZXJyb3ItcmF0ZXMvbHN0bV9yZXN1bHRzL2Nvcm5lcl9sZGFfZGVtb18xMF9ybm5fcHJvYnMuY3N2JwpiYWRfcHJvYnMgPC0gJy9Vc2Vycy9zYXJhL0RvY3VtZW50cy9yZXNlYXJjaC9uaWgvY29tcGFyaW5nLWVycm9yLXJhdGVzL2xzdG1fcmVzdWx0cy9jb3JuZXJfbGRhX2RlbW9fMTBfcm5uX2JhZF9wcm9icy5jc3YnCmdvb2RfZGF0YSA8LSBwdWxsX3RhYmxlKGdvb2RfcHJvYnMpCmJhZF9kYXRhIDwtIHB1bGxfdGFibGUoYmFkX3Byb2JzKQptYWtlX3Bsb3QoZ29vZF9kYXRhLHRpdGxlPSdCYXNlLCBDb3JuZXIsIExEQSwgRGVtb2dyYXBoaWNzLCBTdGVwIDEwJykgCm1ha2VfcGxvdChiYWRfZGF0YSx5bGFiPSdIaWdoZXN0IFByb2JhYmlsaXR5IG9mIGluY29ycmVjdCBjbGFzcycsdGl0bGU9J0Jhc2UsIENvcm5lciwgTERBLCBEZW1vZ3JhcGhpY3MsIFN0ZXAgMTAnKQoKYGBgClRoZSBzdWJqZWN0cyB3aG8gYXJlIHRha2luZyBsb25nZXIgdG8gY29udmVyZ2U6CmBgYHtyLGVjaG89RkFMU0V9CmJhZF9zdWJqZWN0cyA9IGMoMjcyLDQ3LDUzNyw1NzYsNTEwLDUyNSw1NDIpCmZpbHRlcihhbmdsZV9kYXRhLFN1YmogJWluJSBiYWRfc3ViamVjdHMpCmBgYAojIyBCYXNlIGFuZCBDb3JuZXIsIFN0ZXAgNQoKYGBge3IsZWNobz1GQUxTRX0KZ29vZF9wcm9icyA8LSAnL1VzZXJzL3NhcmEvRG9jdW1lbnRzL3Jlc2VhcmNoL25paC9jb21wYXJpbmctZXJyb3ItcmF0ZXMvbHN0bV9yZXN1bHRzL2Nvcm5lcl81X3Jubl9wcm9icy5jc3YnCmJhZF9wcm9icyA8LSAnL1VzZXJzL3NhcmEvRG9jdW1lbnRzL3Jlc2VhcmNoL25paC9jb21wYXJpbmctZXJyb3ItcmF0ZXMvbHN0bV9yZXN1bHRzL2Nvcm5lcl81X3Jubl9iYWRfcHJvYnMuY3N2Jwpnb29kX2RhdGEgPC0gcHVsbF90YWJsZShnb29kX3Byb2JzKQpiYWRfZGF0YSA8LSBwdWxsX3RhYmxlKGJhZF9wcm9icykKbWFrZV9wbG90KGdvb2RfZGF0YSx0aXRsZT0nQmFzZSAmIENvcm5lciwgU3RlcCA1JykgCm1ha2VfcGxvdChiYWRfZGF0YSx5bGFiPSdIaWdoZXN0IFByb2JhYmlsaXR5IG9mIGluY29ycmVjdCBjbGFzcycsdGl0bGU9J0Jhc2UgJiBDb3JuZXIsIFN0ZXAgNScpCmBgYAoKIyMgQmFzZSBhbmQgQ29ybmVyLCBTdGVwIDEKCmBgYHtyLGVjaG89RkFMU0V9Cmdvb2RfcHJvYnMgPC0gJy9Vc2Vycy9zYXJhL0RvY3VtZW50cy9yZXNlYXJjaC9uaWgvY29tcGFyaW5nLWVycm9yLXJhdGVzL2xzdG1fcmVzdWx0cy9jb3JuZXJfMV9ybm5fcHJvYnMuY3N2JwpiYWRfcHJvYnMgPC0gJy9Vc2Vycy9zYXJhL0RvY3VtZW50cy9yZXNlYXJjaC9uaWgvY29tcGFyaW5nLWVycm9yLXJhdGVzL2xzdG1fcmVzdWx0cy9jb3JuZXJfMV9ybm5fYmFkX3Byb2JzLmNzdicKZ29vZF9kYXRhIDwtIHB1bGxfdGFibGUoZ29vZF9wcm9icykKYmFkX2RhdGEgPC0gcHVsbF90YWJsZShiYWRfcHJvYnMpCm1ha2VfcGxvdChnb29kX2RhdGEsdGl0bGU9J0Jhc2UgJiBDb3JuZXIsIFN0ZXAgMScpIAptYWtlX3Bsb3QoYmFkX2RhdGEseWxhYj0nSGlnaGVzdCBQcm9iYWJpbGl0eSBvZiBpbmNvcnJlY3QgY2xhc3MnLHRpdGxlPSdCYXNlICYgQ29ybmVyLCBTdGVwIDEnKQpgYGAKCgojIEJhc2UsIENvIHNybmVyLCBMREEgJiBEZW1vZ3JhcGhpY3MsIFN0ZXAgMQoKYGBge3IsZWNobz1GQUxTRX0KZ29vZF9wcm9icyA8LSAnL1VzZXJzL3NhcmEvRG9jdW1lbnRzL3Jlc2VhcmNoL25paC9jb21wYXJpbmctZXJyb3ItcmF0ZXMvbHN0bV9yZXN1bHRzL2Nvcm5lcl9sZGFfZGVtb18xX3Jubl9wcm9icy5jc3YnCmJhZF9wcm9icyA8LSAnL1VzZXJzL3NhcmEvRG9jdW1lbnRzL3Jlc2VhcmNoL25paC9jb21wYXJpbmctZXJyb3ItcmF0ZXMvbHN0bV9yZXN1bHRzL2Nvcm5lcl9sZGFfZGVtb18xX3Jubl9iYWRfcHJvYnMuY3N2Jwpnb29kX2RhdGEgPC0gcHVsbF90YWJsZShnb29kX3Byb2JzKQpiYWRfZGF0YSA8LSBwdWxsX3RhYmxlKGJhZF9wcm9icykKbWFrZV9wbG90KGdvb2RfZGF0YSx0aXRsZT0nQmFzZSwgQ29ybmVyLCBMREEsIERlbW9ncmFwaGljcywgU3RlcCAxJykgCm1ha2VfcGxvdChiYWRfZGF0YSx5bGFiPSdIaWdoZXN0IFByb2JhYmlsaXR5IG9mIGluY29ycmVjdCBjbGFzcycsdGl0bGU9J0Jhc2UsIENvcm5lciwgTERBLCBEZW1vZ3JhcGhpY3MsIFN0ZXAgMScpCgpgYGA=